home *** CD-ROM | disk | FTP | other *** search
- .lall
- .286p
- .model Large
-
- .data
- extrn _end:Word ;Stack bottom
- extrn _sp:Word ;Icon Stack Pointer
- public STKHQQ ; Used by parasitic heap
- STKHQQ dw Offset DGROUP: _end+512
- .stack
-
- .code
- extrn __amsg_exit: Far
- Public __chkstk
- __chkstk Proc Far
-
- pop cx ; get return offset
- pop dx ; get return segment
-
- Mov Bx,Ss
- Cmp Bx,DGROUP ; Running with current system stack?
- Jne COEXSTKCHK
-
- mov bx,sp
- sub bx,ax ; new position
- jc OMerr ; error - out of memory
- cmp bx,[STKHQQ] ; SP - AX : STKHQQ (for heap/stack)
- jb OMerr ; error - out of memory
-
- mov sp,bx ; set new stack pointer
-
- push dx ; push segment
- push cx ; push offset
- ret ; far return to dx:cx
-
- COEXSTKCHK:
-
- mov bx,sp
- sub bx,ax ; new position
- jc OMerr ; error - out of memory
- Mov ax,_sp
- Add ax,512 ; Add stack slop..
- cmp bx,ax
- jb OMerr ; error - out of memory
-
- mov sp,bx
- push dx
- push cx
- ret
- OMerr:
- xor ax,ax
- jmp __amsg_exit ; give stack overflow and die
- __chkstk Endp
-
- Public __stackavail
- __stackavail Proc Far
-
- Mov Cx,Ss
- Cmp Cx,DGROUP
- Jne Costkavail
-
- Pop Cx
- Pop Dx
- Mov Ax,[STKHQQ]
- Cmp Ax,Sp
- Jae L10
- Sub Ax,Sp
- Neg Ax
- L0D: Push Dx
- Push Cx
- Ret
- L10: Xor Ax,Ax
- Jmp L0D
-
- Costkavail:
- Pop Cx
- Pop Dx
- Mov Ax,_sp
- Add Ax,512
- Cmp Ax,Sp
- Jae L10
- Sub Ax,Sp
- Neg Ax
- Jmp L0D
-
- __stackavail Endp
- End
-